////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  rertuning.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef RERTUNING_H
#define RERTUNING_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"

#define RERTUNING_NAMESPACE_BEGIN namespace rerTuning {
#define RERTUNING_NAMESPACE_END }

RERTUNING_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ChromatixRedEyeReduction
/// Comments:       Red Eye Reduction Definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct ChromatixRedEyeReduction
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableRedEyeReductionXenonStrobe
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Enable red eye reduction feature for Xenon flash
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL           enableRedEyeReductionXenonStrobe;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableRedEyeReductionFlashStrobe
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Enable red eye reduction feature for LED flash
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL           enableRedEyeReductionFlashStrobe;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// preflashCyclesCount
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   How many pulse cycles during preflash sequence
    /// Range:         [2,10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32          preflashCyclesCount;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// msIntervalBetweenPulses
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   duration of off interval between on pulses, in milliseconds
    /// Range:         [30,100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32          msIntervalBetweenPulses;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// usXenonPulsesDuration
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Duration of a Xenon pulse in micro seconds
    /// Range:         [10,100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32          usXenonPulsesDuration;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// msLEDPulsesDuration
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Duration of a LED pulse in milliseconds
    /// Range:         [10,100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32          msLEDPulsesDuration;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// preflashLEDCurrent
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Current for strobe sequence
    /// Range:         [120,900]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32          preflashLEDCurrent;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ChromatixRedEyeReductionClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ChromatixRedEyeReductionClass : public ParameterModule, public ChromatixRedEyeReduction
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChromatixRedEyeReductionClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChromatixRedEyeReductionClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~ChromatixRedEyeReductionClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ChromatixRedEyeReduction
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadChromatixRedEyeReduction(
        ParameterFileSymbolTableEntry* entry,
        ChromatixRedEyeReduction* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        ChromatixRedEyeReduction::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class ChromatixRedEyeReductionClass

RERTUNING_NAMESPACE_END
#endif // RERTUNING_H

